//=======================================Copyright(c)===========================================
// 								  深圳易马达科技有限公司
//---------------------------------------文件信息----------------------------------------------
//文件名   	: FM11NC08.h
//创建人  	: Handry
//创建日期	: 
//描述	    : FM11NC08 NFC头文件
//-----------------------------------------------当前版本修订----------------------------------
//修改人   	:
//版本	    :
//修改日期	:
//描述	    :
//=============================================================================================
#ifndef __FM11NC08_H
#define __FM11NC08_H

//=============================================================================================
//头文件
//=============================================================================================
#include "BSPTypeDef.h"
#include "BSPSPI.h"
#include "BSPGPIO.h"

//=============================================================================================
//数据结构定义
//=============================================================================================
typedef enum
{
    eNFCStat_Init=0,
    eNFCStat_Disable = 1,
    eNFCStat_Offline = 2,
    eNFCStat_Nolink = 3,
    eNFCStat_RX = 4,	//接收状态
    eNFCStat_TX = 5,	//发送状态
    eNFCStat_Idle,
}e_NFCStat;


typedef struct
{
    u8 * msg;
    u16 cnt;
    u16 sta;
}t_NFC_MSG;			//NFC信息结构体

typedef struct
{
	e_NFCStat sta;
    u8 *msg;		//NULL--不进行数据收发
    u16 msgcnt;		//RX接收到的帧数据字节数，TX发送的数据字节数
    u16 msgptr;		//数据收发位置指针
}t_NFC;

//=============================================================================================
//宏参数设定
//=============================================================================================
#define		NFC_SPI_CHN				eSPI0		//NFC SPI通信通道

#define		NFC_WRITE_EEP_MAX_LEN	16			//最大写入EEPROM字节数
#define 	NFC_RXBUF_SIZE 			512
#define 	NFC_TXBUF_SIZE 			512

#define 	NFC_CFG_EEPROM 			0x03B0		//NFC配置在EEPROM中的位置

#define     NFC_FIFO_FLUSH 			1
#define     NFC_FIFO_WCNT 			2
#define     NFC_RF_STATUS 			3
#define     NFC_RF_TXEN 			4
#define     NFC_MAIN_IRQ 			7
#define     NFC_FIFO_IRQ 			8
#define     NFC_AUX_IRQ 			9
#define     NFC_MAIN_IRQ_MASK 		10
#define     NFC_FIFO_IRQ_MASK 		11
#define     NFC_AUX_IRQ_MASK 		12
#define		NFC_NFC_CFG				13

//RF 状态寄存器
#define     NFC_RFSTA_IDLE 			0
#define     NFC_RFSTA_READY 		1
#define     NFC_RFSTA_ACTIVE 		2
#define     NFC_RFSTA_AUTHENTICATED 3
#define     NFC_RFSTA_HALT 			4
#define     NFC_RFSTA_L4 			5
#define     NFC_RFSTA_MASK 			0xe0
#define     NFC_RFSTA_SHIFT 		5

#define 	NFC_MAINIRQ_PWON_MASK 	0x80
#define 	NFC_MAINIRQ_ACTIVE_MASK 0x40
#define 	NFC_MAINIRQ_RXST_MASK 	0x20
#define 	NFC_MAINIRQ_RXDN_MASK 	0x10
#define 	NFC_MAINIRQ_TXDN_MASK 	0x08
#define 	NFC_MAINIRQ_ARBIT_MASK 	0x04
#define 	NFC_MAINIRQ_FIFO_MASK 	0x02
#define 	NFC_MAINIRQ_AUX_MASK 	0x01

#define 	NFC_FIFOIRQ_WL_MASK 	0x08
#define 	NFC_FIFOIRQ_OVF_MASK 	0x04
#define 	NFC_FIFOIRQ_FULL_MASK 	0x02
#define 	NFC_FIFOIRQ_EMP_MASK 	0x01

#define 	NFC_AUXIRQ_EEDN_MASK 	0x80
#define 	NFC_AUXIRQ_EEER_MASK 	0x40
#define 	NFC_AUXIRQ_PAER_MASK 	0x20
#define 	NFC_AUXIRQ_CRCER_MASK 	0x10
#define 	NFC_AUXIRQ_FAER_MASK 	0x08

//=============================================================================================
//静态函数声明
//=============================================================================================
//=============================================================================================
//函数名称	: static __INLINE void FM11NC08CSHigh(void)
//函数参数	:
//输出参数	:
//静态变量	:
//功    能	: NFC片选拉高，失能
//注    意	:
//=============================================================================================
static inline void FM11NC08CSHigh(void)
{
	BSPGPIOSetPin(NFC_CS_PORT,NFC_CS_PIN);
}

//=============================================================================================
//函数名称	: static __INLINE void FM11NC08CSLow(void)
//函数参数	:
//输出参数	:
//静态变量	:
//功    能	: NFC片选拉低，使能
//注    意	:
//=============================================================================================
static inline void FM11NC08CSLow(void)
{
	BSPGPIOClrPin(NFC_CS_PORT,NFC_CS_PIN);
}

//=============================================================================================
//声明接口函数
//=============================================================================================
//=============================================================================================
//函数名称	: u8 FM11NC08Init(void)
//输入参数	: void
//输出参数	: 初始化是否成功，TURE:成功  FALSE:失败
//静态变量	: void
//功    能	: FM11NC08初始化函数
//注    意	:
//=============================================================================================
u8 FM11NC08Init(void);

//=============================================================================================
//函数名称	: u8 FM11NC08ReadReg(u8 addr)
//输入参数	: addr:读取的地址
//输出参数	: 读取的寄存器的值
//静态变量	: void
//功    能	: FM11NC08读寄存器函数
//注    意	:
//=============================================================================================
u8 FM11NC08ReadReg(u8 addr);

//=============================================================================================
//函数名称	: void FM11NC08WriteReg(u8 addr, u8 data)
//输入参数	: addr:写入的地址	data:写入的数据
//输出参数	: void
//静态变量	: void
//功    能	: FM11NC08写寄存器函数
//注    意	:
//=============================================================================================
void FM11NC08WriteReg(u8 addr, u8 data);

//=============================================================================================
//函数名称	: void FM11NC08ReadEEPROM(u16 addr, u8 *data , u8 len)
//输入参数	: addr:读取的地址  *data:读取放入的数组指针	len：读取的长度
//输出参数	: 读取的EEPROM
//静态变量	: void
//功    能	: FM11NC08读取的EEPROM函数
//注    意	:
//=============================================================================================
void FM11NC08ReadEEPROM(u16 addr, u8 *data , u8 len);

//=============================================================================================
//函数名称	: void FM11NC08WriteEEPROM(u16 addr, u8 const *data , u8 len)
//输入参数	: addr:写入的地址  *data:写入放入的数组指针	len：写入的长度
//输出参数	: 写入的EEPROM
//静态变量	: void
//功    能	: FM11NC08写入的EEPROM函数
//注    意	:
//=============================================================================================
void FM11NC08WriteEEPROM(u16 addr, u8 const *data , u8 len);

//=============================================================================================
//函数名称	: void FM11NC08ReadFIFO(u8 *data,u8 len)
//输入参数	: *data:读取放入的数组指针    len:读取的长度
//输出参数	: void
//静态变量	: void
//功    能	: FM11NC08读取FIFO函数
//注    意	:
//=============================================================================================
void FM11NC08ReadFIFO(u8 *data,u8 len);

//=============================================================================================
//函数名称	: void FM11NC08WriteFIFO(u8 *data,u8 len)
//输入参数	: *data:写入数组指针    len:写入的长度
//输出参数	: void
//静态变量	: void
//功    能	: FM11NC08写入FIFO函数
//注    意	:
//=============================================================================================
void FM11NC08WriteFIFO(u8 *data,u8 len);

//=============================================================================================
//函数名称	: u8 FM11NC08FrameRx(t_NFC_MSG * msg)
//输入参数	: msg：要接收放置的地址
//输出参数	: 是否接收成功，FALSE:失败；TRUE：成功
//静态变量	: void
//功    能	: FM11NC08接收帧
//注    意	:
//=============================================================================================
u8 FM11NC08FrameRx(t_NFC_MSG * msg);

//=============================================================================================
//函数名称	: u8 FM11NC08FrameTx(t_NFC_MSG * msg, uint16_t overtime)
//输入参数	: msg：要发送的数据   overtime：超时时间
//输出参数	: 是否发送成功，FALSE:失败；TRUE：成功
//静态变量	: void
//功    能	: FM11NC08发送帧
//注    意	:
//=============================================================================================
u8 FM11NC08FrameTx(t_NFC_MSG * msg, uint16_t overtime);

//=============================================================================================
//函数名称	: void FM11NC08INTCallBackFunc(void)
//输入参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: FM11NC08 int引脚中断回调函数
//注    意	:
//=============================================================================================
void FM11NC08INTCallBackFunc(void);

//=============================================================================================
//函数名称	: u8 FM11NC08Disable(void)
//输入参数	: void
//输出参数	: void
//静态变量	: void
//功	能	: FM11NC08关闭函数
//注	意	:
//=============================================================================================
void FM11NC08Disable(void);

//=============================================================================================
//函数名称	: u8 FM11NC08Disable(void)
//输入参数	: void
//输出参数	: 1:关闭完成；0：关闭失败
//静态变量	: void
//功	能	: FM11NC08关闭完成判断函数
//注	意	:
//=============================================================================================
u8 FM11NC08DisableComplete(void);

//=============================================================================================
//函数名称	: void FM11NC08PowerOn(void)
//输入参数	: void
//输出参数	: void
//静态变量	: void
//功	能	: FM11NC08上电使能
//注	意	:
//=============================================================================================
void FM11NC08PowerOn(void);

//=============================================================================================
//函数名称	: void FM11NC08MainTask(void *p)
//输入参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: NFC主任务函数
//注    意	:
//=============================================================================================
void FM11NC08MainTask(void *p);

#endif

/*****************************************end of FM11NC08.h*****************************************/
